package org.shiwen.week9;

public abstract class AbstractConstructor {
    private int age;
    private String name;
    public AbstractConstructor() {
    }
    public AbstractConstructor(int age, String name) {
        this.age = age;
        this.name = name;
    }
    public void show(){}

    //抽象类哪怕没有抽象方法也不会报错
    public abstract void show2();
}

//有抽象方法的一定是抽象类，AbstractConstructor2不是抽象类，但是有抽象方法所以报错
//class AbstractConstructor2{
//    public abstract void show();
//}


class TestConstructor {
    public static void main(String[] args) {
        //就算抽象类有构造方法且这个抽象类没有抽象方法，也不能直接实例化一个对象
//        AbstractConstructor ac = new AbstractConstructor(10, "shiwen")

    }
}

class subConstructor extends AbstractConstructor{
    public subConstructor(int age, String name) {
        super(age, name);
    }

    public subConstructor() {
    }

    //抽象类的子类必须实现抽象方法
    @Override
    public void show2() {

    }
}

abstract class subConstructor2 extends AbstractConstructor{
    //或者说抽象类的子类依旧是抽象类

    public abstract void show3();
}

class subConstructor3 extends subConstructor2{

    //如果有多层继承的关系，那么子类必须重写所有父类的抽象方法才可以实例化
    @Override
    public void show2() {

    }

    @Override
    public void show3() {

    }
}